#!/bin/bash
#SyncTime - sincroniza horário na rede interna em um servidor ntp
#autor: Ricardo Brito do Nascimento
#email: ricardo[at]rbncurriculo.cjb.net
#v3.0
#
#Data: 01/11/2007
#
#Descrição:
# Este script atualiza a hora de máquinas linux atraves de um
# servidor ntp disponível, e acrescenta automaticamente a entrada
# no /etc/crontrab para sincronização automática de hora, controlando 
# as versões de configuração do sitema, e mantendo o arquivo original
# imutável; É necessário estar logado como 'root' para atualização 
# do crontab, e o script checa automaticamente as dependencias e 
# se estar sendo executado como 'root'.
#


SINCSERVER=10.1.0.1
ZICFILE=Sao_Paulo.zic
TIMEFILE=/usr/share/zoneinfo/America/Sao_Paulo
TIMEFILECONF=/etc/localtime
EXTOLDTIMEFILECONF='default'
CRON=/etc/crontab

# Aborta instação sem which
if [ ! -e /usr/bin/which ]; then
        echo "Nota: which é requerido para este script! finalizando Agora."
        exit 1
fi

# Aborta instação sem mv
if [ -z `which mv 2> /dev/null` ]; then
        echo "Nota: mv é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem cp
if [ -z `which cp 2> /dev/null` ]; then
        echo "Nota: cp é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem ln
if [ -z `which ln 2> /dev/null` ]; then
        echo "Nota: ln é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem zic
if [ -z `which zic 2> /dev/null` ]; then
        echo "Nota: zic é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem ntpdate
if [ -z `which ntpdate 2> /dev/null` ]; then
        echo "Nota: ntpdate é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem find
if [ -z `which find 2> /dev/null` ]; then
        echo "Nota: find é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem wc
if [ -z `which wc 2> /dev/null` ]; then
        echo "Nota: wc é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem expr
if [ -z `which expr 2> /dev/null` ]; then
        echo "Nota: expr é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem whoami
if [ -z `which whoami 2> /dev/null` ]; then
        echo "Nota: whoami é requerido para $0! finalizando Agora."
        exit 1
fi

# Aborta instação sem tabela fuso de horário
if [ ! -e $ZICFILE ]; then
        echo "Nota: o arquivo $ZICFILE é requerido para este script! finalizando Agora."
        exit 1
fi

# Aborta instação sem privilégios de root
# check running instal as root
if [ `whoami` != root ]; then
        echo "Nota: root é requerido para executar este script! finalizando Agora."
        exit 1
fi

COUNT=$(expr $(find $TIMEFILECONF*|wc -l) - 1)
mv $TIMEFILECONF $TIMEFILECONF.$EXTOLDTIMEFILECONF$COUNT
ln -s $TIMEFILE $TIMEFILECONF
zic $ZICFILE
ntpdate $SINCSERVER

COUNT=$(expr $(find $CRON* | wc -l) - 1)
##echo $COUNT

if [ $COUNT == '0' ]; then 
#        #echo ok; 
        mv $CRON $CRON$COUNT
        cp $CRON$COUNT $CRON
else 
#        #echo nok; 
        mv $CRON $CRON$COUNT
        cp $CRON'0' $CRON
fi
#Campo  Função
#1o.    (m)	Minuto
#2o.    (h)	Hora 
#3o.    (dom)	Dia do mês
#4o.    (mon)	Mês
#5o.    (dow)	Dia da semana (D[0|7] S[1] T[2] Q[3] Q[4] S[5] S[6])
#6o.    (user)	Usuário que executa o comando
#7o.	(cmd)	comando ou Programa pra execução

echo '#m h dom mon dow user  cmd' >> $CRON
echo ' 0 10 *   *   *  root  ntpdate '$SINCSERVER >> $CRON

